//
//  main.c
//  Switch语句
//
//  Created by ws on 2017/7/15.
//  Copyright © 2017年 王松. All rights reserved.
//

#include <stdio.h>
#include <stdlib.h>//使用随机数必须包含这个库

/**
 如果表达式的值等于常量那么就执行这个常量后面的语句
 
 switch (表达式(不是条件表达式)) {
 case 常量(不可以是个变量):
 语句...;
 ....;
 break;
 case 常量:
 语句...;
 ....;
 break;
 case 常量:
 语句...;
 ....;
 break;
 
 default:
 break;
 }
 注意点
 1.case后面的常量不可以重复
 2.break作用:结束switch语句
 3.switch语句只有遇到break 或者 switch后面的大括号 才会结束
 4.当switch与某一个cash匹配了,那么后面的所有case都失效了
 5.case后面只能是常量或者长量表达式
 6.switch后面小括号中只能是整型表达式
 7.在case后面的语句中不能直接定义变量,如果要定义变量必须要加上一个大括号来明确变量的作用域
 
 使用场景
 1.当某一个变量只有几个固定的取值的时候,使用swith会更加简洁
 2.如果是区间(比如: (-无穷,1] [10 +无穷))的话我们就用if
 */
void test1(){
    int weak = 3;
    switch (weak) {
        case 1:
            printf("星期一\n");
            break;
        case 2:
            printf("星期二\n");
            break;
        case 3:
            printf("星期三\n");
            break;
        case 4:
            printf("星期四\n");
            break;
        case 5:
            printf("星期五\n");
            break;
        case 6:
            printf("星期六\n");
            break;
        case 7:
            printf("星期七\n");
            break;
        default:
            printf("出错");
            break;
    }

}
void test2(){
    int month = 1;
    switch (month) {
        case 12:
        case 1:
        case 2:
            printf("冬季\n");
            break;
        case 3:
        case 4:
        case 5:
            printf("春季\n");
            break;
        case 6:
        case 7:
        case 8:
            printf("夏季\n");
            break;
        case 9:
        case 10:
        case 11:
            printf("秋季\n");
            break;
        default:
            printf("出错");
            break;
    }
    
    /**
     使用场景
     1.当某一个变量只有几个固定的取值的时候,使用swith会更加简洁
     2.如果是区间(比如: (-无穷,1] [10 +无穷))的话我们就用if
     
     */
    

}
int test3(){
    //录入 1 + 2 输出 1 + 2 = 3
    //定义两个变量,表示操作数
    int num1,num2;
    //定义一个char类型的变量 表示要进行的操作
    char operator;
    //提示录入
    printf("请按照如下格式录入(1 + 1):\n");
    scanf("%d %c %d",&num1,&operator,&num2);
    //根据用户的录入进行计算,然后输入结果,
    int result = 0;
    switch (operator) {
        case '+':
            //字符类型本质也是整型
            return result = num1 + num2;
            break;
        case '-':
            return result = num1 - num2;
            break;
        case '*':
            return result = num1 * num2;
            break;
        case '/':
            if (num2 == 0) {
                printf("除数不能为0");
                return 0;
            }
            return result = num1 / num2;
            break;
        default:
            printf("录入格式错误");
            break;
    }
    
    printf("%d %c %d = %d\n",num1,operator,num2,result);
    return result;
}
void test4(){
    int age = 5;
    //在case后面的语句中不能直接定义变量,如果要定义变量必须要加上一个大括号来明确变量的作用域
    switch (age) {
        case 1:
            //            int b = 2;//此变量的作用域不明确
        {
            int b = 2;//此变量的作用域明确
        }
            printf("年龄小");
            break;
            
        default:
            break;
    }

}
/**
 实现随机数的两种方式
 */
void wstest(){
    // 获得0到2的随机数
    
    
    //实现随机数方法1
    //    int random = arc4random();//产生一个随机数
    //    random = random % 3;
    
    //实现随机数方法2
    int random = arc4random_uniform(3);
}

/**
 假设: 0代表石头
      1代表剪刀
      2代表布
 */
void test5(){
    printf("请出拳: 0代表石头 1代表剪刀 2代表布");
    int playerChoose;
    scanf("%d",&playerChoose);
    int computerChoose = arc4random_uniform(3);
    if ((playerChoose == 0 && computerChoose == 1 )|| (playerChoose == 1 && computerChoose == 2) || (playerChoose == 2 && computerChoose == 0)) {
        printf("玩家赢了");
    }else if (playerChoose == computerChoose){
        printf("平局");
    }else{
        printf("电脑赢了");
    }

}
int main(int argc, const char * argv[]) {
    int age = 5;
    //在case后面的语句中不能直接定义变量,如果要定义变量必须要加上一个大括号来明确变量的作用域
    switch (age) {
        case 1:
            //            int b = 2;//此变量的作用域不明确
        {
            int b = 2;//此变量的作用域明确
        }
            printf("年龄小");
            break;
            
        default:
            break;
    }

    return 0;
}
